<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="Content-Language" content="zh-CN"><title>resolved.conf
  中文手册 [金步国]</title><style>
@font-face { font-family: "JinBuGuoWebMono"; src: url("http://www.jinbuguo.com/d/mono.ttf") format("truetype"); }
* { font-family: "JinBuGuoWebMono", "Ubuntu Mono", "Consolas", "Menlo", monospace; }
body { margin:10px; }
h1 { text-align:center; background:#ddd; }
h2#auth_name { text-align:center; margin: 10px 5%; }

    a.headerlink {
      color: #c60f0f;
      font-size: 0.8em;
      padding: 0 4px 0 4px;
      text-decoration: none;
      visibility: hidden;
    }

    a.headerlink:hover {
      background-color: #c60f0f;
      color: white;
    }

    h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, dt:hover > a.headerlink {
      visibility: visible;
    }
</style><script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><h1>resolved.conf 中文手册</h1><h2 id="auth_name">译者：<strong><a href="http://www.jinbuguo.com/">金步国</a></strong></h2><hr><h3>版权声明</h3><p>本文译者是一位开源理念的坚定支持者，所以本文虽然不是软件，但是遵照开源的精神发布。</p><ul><li>无担保：本文译者不保证译文内容准确无误，亦不承担任何由于使用此文档所导致的损失。</li><li>自由使用：任何人都可以自由的<u>阅读/链接/打印</u>此文档，无需任何附加条件。</li><li>名誉权：任何人都可以自由的<u>转载/引用/再创作</u>此文档，但必须保留译者署名并注明出处。</li></ul><h3>其他作品</h3><p>本文译者十分愿意与他人分享劳动成果，如果你对我的其他翻译作品或者技术文章有兴趣，可以在如下位置查看现有的作品集：</p><ul><li><a href="http://www.jinbuguo.com/">金步国作品集</a> [ <a href="http://www.jinbuguo.com/">http://www.jinbuguo.com/</a> ]</li></ul><h3>联系方式</h3><p>由于译者水平有限，因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好)，请来信指出，任何提高译文质量的建议我都将虚心接纳。</p><ul><li>Email(QQ)：70171448在QQ邮箱</li></ul><hr><a href="systemd.index.html">手册索引</a> ·
  <a href="systemd.directives.html">指令索引</a><span style="float:right">systemd-241</span><hr><div class="refentry"><a name="resolved.conf"></a><div class="titlepage"></div><div class="refnamediv"><h2>名称</h2><p>resolved.conf, resolved.conf.d — 网络名字解析服务配置文件</p></div><div class="refsynopsisdiv"><h2>大纲</h2><p><code class="filename">/etc/systemd/resolved.conf</code></p><p><code class="filename">/etc/systemd/resolved.conf.d/*.conf</code></p><p><code class="filename">/run/systemd/resolved.conf.d/*.conf</code></p><p><code class="filename">/usr/lib/systemd/resolved.conf.d/*.conf</code></p></div><div class="refsect1"><a name="id-1.5"></a><h2 id="描述">描述<a class="headerlink" title="Permalink to this headline" href="resolved.conf.html#%E6%8F%8F%E8%BF%B0">¶</a></h2><p>这些配置文件控制着本地 DNS 与 LLMNR
    名字解析</p></div><div class="refsection"><a name="main-conf"></a><h2>配置目录及其优先级</h2><p>默认设置是在编译期间确定的，
    所以仅在确实需要修改默认设置的情况下，
    才需要使用配置文件。位于
    <code class="filename">/etc/systemd/</code> 目录中的初始配置文件，
    仅包含了展示选项默认值的注释，
    目的在于方便系统管理员查看和直接修改。
    </p><p>如果软件包想要自定义某些默认设置，
    那么必须将自定义的配置文件安装到
    <code class="filename">/usr/lib/systemd/*.conf.d/</code> 目录中。
    <code class="filename">/etc/</code> 目录仅供系统管理员使用。
    系统管理员可以利用下面的逻辑来覆盖默认设置：
    主配置文件最先被读取，
    优先级也最低。
    所有 <code class="filename">*.conf.d/</code> 中的配置文件
    都会覆盖主配置文件中的设置。
    所有 <code class="filename">*.conf.d/</code> 中的配置文件(无论位于哪个目录中)，
    统一按照文件名的字典顺序处理。
    当多个配置文件都设置了同一个选项的时候：
    (1)如果该选项仅接受一个单一值，那么仅以文件名最靠后(字典顺序)的那一个为准；
    (2)如果该选项可接受一个值列表，那么将会按照文件名的字典顺序将所有值列表拼接起来。
    为了便于排序，
    建议给所有 <code class="filename">*.conf.d/</code> 中的配置文件
    都加上
    两位十进制数字的文件名前缀。</p><p>如果系统管理员想要屏蔽 <code class="filename">/usr/lib/</code> 目录中的某个配置文件，
    那么最佳做法是在 <code class="filename">/etc/</code> 目录中
    创建一个指向 <code class="filename">/dev/null</code> 的同名符号链接，
    即可彻底屏蔽 <code class="filename">/usr/lib/</code> 目录中的
    同名文件。</p></div><div class="refsect1"><a name="id-1.7"></a><h2 id="选项">选项<a class="headerlink" title="Permalink to this headline" href="resolved.conf.html#%E9%80%89%E9%A1%B9">¶</a></h2><p>下列选项都位于 "<code class="literal">[Resolve]</code>" 小节：</p><div class="variablelist"><dl class="variablelist"><dt id="DNS="><span class="term"><code class="varname">DNS=</code></span><a class="headerlink" title="Permalink to this term" href="resolved.conf.html#DNS=">¶</a></dt><dd><p>一个空格分隔的 IPv4 与 IPv6 地址列表。用作系统的全局DNS服务器。
        DNS请求将被首先发送给
        <a href="systemd-networkd.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-networkd.service</span>(8)</span></a>
        中针对特定连接设置的DNS服务器或者由外部程序在运行时设置的DNS服务器，然后才会发送给此处设置的全局DNS服务器。
        出于兼容性考虑，如果未设置此选项，那么将使用 <code class="filename">/etc/resolv.conf</code> 中的DNS服务器(如果其中确实配置了DNS服务器的话)。
        此选项的默认值为空。</p></dd><dt id="FallbackDNS="><span class="term"><code class="varname">FallbackDNS=</code></span><a class="headerlink" title="Permalink to this term" href="resolved.conf.html#FallbackDNS=">¶</a></dt><dd><p>一个空格分隔的 IPv4 与 IPv6 地址列表。用作系统的替补DNS服务器。
        在 <a href="systemd-networkd.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-networkd.service</span>(8)</span></a> 中
        针对特定连接配置的任何DNS服务器的优先级都高于此选项中设置的DNS服务器，
        也高于上述 <code class="varname">DNS=</code> 中设置的DNS服务器，同样也高于 <code class="filename">/etc/resolv.conf</code> 中设置的DNS服务器。
        所以，此选项所设置的DNS服务器仅在实在找不到可用DNS的情况下才会被使用。
        若未设置此选项，则使用程序内置的默认DNS服务器列表。</p></dd><dt id="Domains="><span class="term"><code class="varname">Domains=</code></span><a class="headerlink" title="Permalink to this term" href="resolved.conf.html#Domains=">¶</a></dt><dd><p>一个空格分隔的域名列表。
        在解析不含"."的域名时，将被用作域名后缀，以将这些域名转化为FQDN(全限定域名)。
        这些后缀将会严格按照这里设置的顺序依次尝试，直到解析成功。
        出于兼容性考虑，如果未设置此选项，
        那么将使用 <code class="filename">/etc/resolv.conf</code> 中列出的搜索域(如果其中确实配置了搜索域的话)。
        此选项的默认值为空。</p><p>如果指定的域名带有 "<code class="literal">~</code>" 前缀，
        那么表示它不是一个搜索域，而是一个"路由域"，也就是仅用于将指定的域名查询请求
        优先路由到上文 <code class="varname">DNS=</code> 设置的全局DNS服务器上去。
        注意，如果不存在针对特定连接的DNS服务器，那么 "<code class="literal">~</code>" 语法没有任何实际效果。
        特殊值 "<code class="literal">~.</code>" 表示将所有DNS查询请求
        优先路由到上文 <code class="varname">DNS=</code> 设置的全局DNS服务器上去
        (前面的波浪号表示这是一个"路由域"，后面的点表示DNS根域(也就是所有域名的后缀))。</p></dd><dt id="LLMNR="><span class="term"><code class="varname">LLMNR=</code></span><a class="headerlink" title="Permalink to this term" href="resolved.conf.html#LLMNR=">¶</a></dt><dd><p>必须设为 
        "<code class="literal">resolve</code>" 或布尔值。
        控制本机对LLMNR(Link-Local Multicast Name Resolution, <a class="ulink" href="https://tools.ietf.org/html/rfc4795" target="_top">RFC 4795</a>)的支持。
        设为 yes 表示完全支持 LLMNR responder 与 resolver ；
        设为 no 表示彻底不支持 LLMNR ；
        设为 "<code class="literal">resolve</code>"
        表示仅支持 LLMNR resolver 而不支持  LLMNR responder ；
        注意，
        <a href="systemd-networkd.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-networkd.service</span>(8)</span></a>
        中还有针对特定连接的LLMNR设置。
        对于某个特定的连接来说，LLMNR 将仅在针对该连接的设置与全局设置都开启的情况下，
        才会开启。</p></dd><dt id="MulticastDNS="><span class="term"><code class="varname">MulticastDNS=</code></span><a class="headerlink" title="Permalink to this term" href="resolved.conf.html#MulticastDNS=">¶</a></dt><dd><p>必须设为布尔值或特殊值
        "<code class="literal">resolve</code>" ，用于控制本机对组播DNS(<a class="ulink" href="https://tools.ietf.org/html/rfc6762" target="_top">RFC 6762</a>)的支持。
        设为 yes 表示完整的支持组播DNS的 responder 与 resolver 角色。
        设为 no 表示完全禁止组播DNS。
        设为 "<code class="literal">resolve</code>" 表示仅支持解析(resolver)而不支持应答(responder)。
        注意，
        <a href="systemd-networkd.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-networkd.service</span>(8)</span></a>
        还支持针对每个网络连接单独设置对组播DNS的支持。
        对于某个特定的网络连接来说，只有全局开启了对组播DNS的支持，并且同时也针对该连接开启了组播DNS支持的情况下，
        才能在此连接上使用组播DNS 。</p></dd><dt id="DNSSEC="><span class="term"><code class="varname">DNSSEC=</code></span><a class="headerlink" title="Permalink to this term" href="resolved.conf.html#DNSSEC=">¶</a></dt><dd><p>必须设为布尔值或特殊值 
        "<code class="literal">allow-downgrade</code>" 。
        设为 yes 表示使用 DNSSEC 机制
        检查所有 DNS 应答的有效性(多播DNS 与 LLMNR 除外)。
        如果某个DNS应答被鉴定为无效，
        那么上层应用将会得到一个"查询失败"的结果。
        注意，这意味着 DNS 服务器必须支持 DNSSEC 。
        如果某个 DNS 服务器不能正确支持 DNSSEC ，
        那么从该 DNS 服务器接收到的所有应答都将被视为无效应答。
        设为 "<code class="literal">allow-downgrade</code>" 表示：
        如果某个 DNS 服务器不能正确支持 DNSSEC ，
        那么将不使用 DNSSEC 机制检查该 DNS 应答的有效性。
        注意，
        这将导致 DNSSEC 机制形同虚设，从而造成安全漏洞。
        设为 no 则表示彻底禁用 DNSSEC 机制。</p><p>注意，因为 DNSSEC 需要
        额外查询更多的 DNS 数据，所以，开启此选项会减慢 DNS
        查询速度。</p><p>为了确保数据完整性，
        DNSSEC 必须预先知道一些信任锚(相当于域的公钥)。
        systemd 已经内置了 Internet 根域名服务器的信任锚(Trust anchor)，
        不过，系统管理员还可在
        <a href="dnssec-trust-anchors.d.html#"><span class="citerefentry"><span class="refentrytitle">dnssec-trust-anchors.d</span>(5)</span></a>
        中添加更多的信任锚。
        如果信任锚过期或被撤销，那么 DNSSEC 验证机制就会失效，
        此时必须配置新的信任锚，或者通过更新 systemd 软件包来更新
         Internet 根域名服务器的信任锚。
        实际上，当内置的根域名服务器信任锚已经失效，
        并且 <code class="varname">DNSSEC=yes</code> 时，
        所有的DNS查询都将会失败，
        因为此时已经无法验证DNS应答的可靠性了；
        但是如果 
        <code class="varname">DNSSEC=allow-downgrade</code> ，
        那么将会自动关闭 DNSSEC 验证机制。</p><p>查询DNS数据的客户端程序将会被通知：
        (1)其所发出的DNS查询请求是否可以使用DNSSEC机制进行验证；
        (2)返回的应答是否无法使用DNSSEC机制进行验证(原因有三：
        DNS服务器返回的应答不含签名、DNS服务器本身不支持DNSSEC扩展、
        DNS服务器返回的应答中的签名在本地找不到对应的信任锚)。
        如果出现第(2)种情况(无法使用DNSSEC验证返回的应答)，
        那么客户端程序
        必须能够自己验证DNS应答的可靠性。</p><p>强烈建议
        在已知DNS服务器支持DNSSEC扩展的系统上设置
         <code class="varname">DNSSEC=yes</code> 
        并且及时更新信任锚。
        对于其他系统，则建议设置为
        <code class="varname">DNSSEC=allow-downgrade</code> 。</p><p>除了此处的全局 DNSSEC 设置，在
        <a href="systemd-networkd.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-networkd.service</span>(8)</span></a>
        中还支持针对每个连接进行 DNSSEC 设置。
        对于前文提及的系统全局DNS服务器来说，仅参照此处的全局 DNSSEC 设置。
        对于专门针对单个连接设置的DNS服务器来说，
        优先参照针对该连接的 DNSSEC 设置
        (仅在未设置时才参照此处的全局设置)。</p><p>私有DNS区域通常不支持DNSSEC验证，
        除非专门为其配置了反向信任锚(私有区域未签名)
        或者正向信任锚(私有区域已签名)。
        如果选择了 
        "<code class="literal">allow-downgrade</code>" 模式，
        那么将会尝试使用DNS根服务器所不知道的顶级域去检测私有DNS区域。
        注意，
        这个逻辑并不总是适用于所有的私有区域配置。</p><p>默认值是 "<code class="literal">allow-downgrade</code>"</p></dd><dt id="DNSOverTLS="><span class="term"><code class="varname">DNSOverTLS=</code></span><a class="headerlink" title="Permalink to this term" href="resolved.conf.html#DNSOverTLS=">¶</a></dt><dd><p>设为
        "<code class="literal">opportunistic</code>"
        表示
        优先尝试通过 DNS-over-TLS 发送DNS查询请求，
        如果DNS服务器不支持TLS，那么就禁用 DNS-over-TLS 。
        注意，这种模式仍然存在"降级"攻击的安全漏洞。
        设为 "<code class="literal">no</code>" 表示
        完全禁用 DNS-over-TLS ，
        仅使用不安全的传统 UDP 方式发送DNS查询请求。</p><p>因为 DNS-over-TLS 需要额外的数据包建立安全连接，
        所以相比不安全的传统 UDP 方式
        需要消耗更多的查询时间。</p><p>注意，因为解析程序目前尚不能对服务器进行认证，
        所以仍然存在"中间人"攻击的安全漏洞。</p><p>除了这里的全局 DNSOverTLS 设置之外，
        <a href="systemd-networkd.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-networkd.service</span>(8)</span></a>
        还有针对每个连接的 DNSOverTLS 设置。
        对于系统的全局DNS服务器来说，
        仅使用这里的全局 DNSOverTLS 设置。
        但对于针对每个连接设置的DNS服务器来说，
        则优先使用针对每个连接的 DNSOverTLS 设置(仅在未设置时继承全局设置)。</p><p>默认值为 "<code class="literal">no</code>" </p></dd><dt id="Cache="><span class="term"><code class="varname">Cache=</code></span><a class="headerlink" title="Permalink to this term" href="resolved.conf.html#Cache=">¶</a></dt><dd><p>必须设为布尔值。
        默认值 "<code class="literal">yes</code>" 表示缓存先前已经解析成功的域名直到缓存过期，以避免重复查询。
        注意，关闭缓存不但浪费网络流量，更容易造成访问延迟，
        尤其是在使用了DNSSEC的时候。</p><p>注意，对于IP地址为 127.0.0.1 或 ::1 之类的本机DNS来说，DNS缓存总是关闭的。
        这样做是为了避免不必要的多次缓存。</p></dd><dt id="DNSStubListener="><span class="term"><code class="varname">DNSStubListener=</code></span><a class="headerlink" title="Permalink to this term" href="resolved.conf.html#DNSStubListener=">¶</a></dt><dd><p>可设为 "<code class="literal">yes</code>"(默认值), "<code class="literal">no</code>", "<code class="literal">udp</code>", "<code class="literal">tcp</code>" 之一。
        "<code class="literal">udp</code>" 表示本地存根DNS服务器将在 127.0.0.53 的 53 端口上监听 UDP 请求；
        "<code class="literal">tcp</code>" 表示在 127.0.0.53:53 上监听 TCP 请求；
        "<code class="literal">yes</code>" 表示在 127.0.0.53:53 上同时监听 UDP 与 TCP 请求；
        "<code class="literal">no</code>" 表示禁止监听。</p><p>注意，如果 127.0.0.53:53 已被其他程序占用，
        那么本地存根DNS服务器将会自动放弃监听。</p></dd><dt id="ReadEtcHosts="><span class="term"><code class="varname">ReadEtcHosts=</code></span><a class="headerlink" title="Permalink to this term" href="resolved.conf.html#ReadEtcHosts=">¶</a></dt><dd><p>接受一个布尔值。默认值 "<code class="literal">yes</code>" 表示在向DNS服务器发送查询请求之前，优先查询
        <code class="filename">/etc/hosts</code> 
        文件。</p></dd></dl></div></div><div class="refsect1"><a name="id-1.8"></a><h2 id="参见">参见<a class="headerlink" title="Permalink to this headline" href="resolved.conf.html#%E5%8F%82%E8%A7%81">¶</a></h2><p>
      <a href="systemd.html#"><span class="citerefentry"><span class="refentrytitle">systemd</span>(1)</span></a>,
      <a href="systemd-resolved.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-resolved.service</span>(8)</span></a>,
      <a href="systemd-networkd.service.html#"><span class="citerefentry"><span class="refentrytitle">systemd-networkd.service</span>(8)</span></a>,
      <a href="dnssec-trust-anchors.d.html#"><span class="citerefentry"><span class="refentrytitle">dnssec-trust-anchors.d</span>(5)</span></a>,
      <a href="http://man7.org/linux/man-pages/man4/resolv.conf.4.html"><span class="citerefentry"><span class="refentrytitle">resolv.conf</span>(4)</span></a>
      </p></div></div></body></html>
